﻿using System;

namespace NetExceptionReporter
{
    public interface IExceptionWindowBehavior
    {
        /// <summary>
        /// The window's title.
        /// </summary>
        string Title { get; }

        /// <summary>
        /// Determines how the window appears.
        /// </summary>
        ExceptionWindowStyle Style { get; }

        /// <summary>
        /// Occurs when an exception is reported to the exception reporter.
        /// </summary>
        /// <param name="e">Exception to be reported.</param>
        /// <param name="displayExceptionWindow">Determines if an exception window should be displayed.</param>
        void OnException(Exception e, out bool displayExceptionWindow);

        /// <summary>
        /// Provides a detailed description of the problem.
        /// </summary>
        /// <returns>Detailed description of the problem.</returns>
        /// <param name="e">Exception to be reported.</param>
        string OnComposeDetailedDescription(Exception e);

        /// <summary>
        /// Provides the means to report the exception.
        /// </summary>
        /// <param name="e">Exception to be reported.</param>
        void OnReportException(Exception e);
    }
}